//package com.cddx.logistics.util.exception;
//
//
//import com.cddx.logistics.util.model.R;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.validation.BindException;
//import org.springframework.validation.BindingResult;
//import org.springframework.validation.FieldError;
//import org.springframework.web.bind.MethodArgumentNotValidException;
//import org.springframework.web.bind.annotation.ExceptionHandler;
//import org.springframework.web.bind.annotation.RestControllerAdvice;
//
///**
// *
// @RestControllerAdvice 把当前类设置为一个全局的异常处理器
//  * 定义一个全局异常处理器
//  * @author hly
// * @date 2024/6/12 11:04
// */
//@RestControllerAdvice
//public class GlobalExceptionHandler {
//
//    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
//
//    /**
//     * BindException验证异常
//     */
//    @ExceptionHandler(BindException.class)
//    public R handleBindException(BindException e)
//    {
//        BindingResult bindingResult = e.getBindingResult();
//        StringBuilder sb = new StringBuilder("校验失败:");
//        for (FieldError fieldError : bindingResult.getFieldErrors()) {
//            sb.append(fieldError.getField()).append("：").append(fieldError.getDefaultMessage()).append(", ");
//        }
//        String msg = sb.toString();
//        return  R.error("验证异常:"+msg);
//    }
//    /**
//     * MethodArgumentNotValidException验证异常
//     */
//    @ExceptionHandler(MethodArgumentNotValidException.class)
//    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e)
//    {
//        BindingResult bindingResult = e.getBindingResult();
//        StringBuilder sb = new StringBuilder("校验失败:");
//        for (FieldError fieldError : bindingResult.getFieldErrors()) {
//            sb.append(fieldError.getField()).append("：").append(fieldError.getDefaultMessage()).append(", ");
//        }
//        String msg = sb.toString();
//        return  R.error("验证异常:"+msg);
//    }
//    /**
//     * @ExceptionHandler 表示捕获的异常类型,通常会声明更高级的类型
//     * 声明一个全局的处理Exception类型的异常的方法
//     * 处理java异常的时候,不能把真正的原因暴露给前端,而应该把原因通过日志形式记录到文件
//     * @param e 把真正发生的异常注入在e对象,通过调用getMessage获取异常原因
//     * @return 统一的格式R
//     */
//    @ExceptionHandler({Throwable.class})
//    public R handleException(Exception e){
//        logger.error("服务器发生异常:{}",e.getMessage());
//        return R.error("服务器开小差了,请稍后再试");
//    }
//}
